#ifndef STACK_H
#define STACK_H
#include <iostream>
#include "List/linkList.h"
#include "Array/dynamicArray.h"
#define maxn 100
//#define StackLinkList 0

using namespace std;

//利用上面的结点创建栈，分为指向头结点的top指针和计数用的count
class stack:public Node
{
public:
    stack();
    /*入栈(push)操作时，我们只需要找到top所指向的空间，
     * 创建一个新的结点，将新的结点的next指针指向我们的
     * top指针指向的空间，再将top指针转移，指向新的结点，即是入栈操作 */
    stack * pushStack(stack * p, int elem);
    /* 出栈（pop）操作，
     * 是在栈不为空的情况下（注意一定要进行判空操作），
     * 将栈顶的元素删除，同时top指针，next向下进行移动即可的操作。*/
    stack *popStack(stack * p);

    /*  遍历栈，输出栈中所有元素 */
    void showStack(stack * s);
private:
    int count;
    Node *top;
};

class StackArray
{
public:
    int data[maxn];
    int top;

public:
    StackArray();
    ~StackArray(){}

public:
    void push(StackArray *s, int data);
    void pop(StackArray *s);
    void printStack(StackArray *s);
};


void testRunStack();

#endif // STACK_H
